package com.qf.service.impl;

import com.qf.dao.OrderDao;
import com.qf.dao.impl.OrderDaoImpl;
import com.qf.pojo.Order;
import com.qf.pojo.OrderItem;
import com.qf.pojo.PageBean;
import com.qf.service.OrderService;
import com.qf.utils.DruidJdbcUtils;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * @author 高圆圆
 * @date 2023/6/6 17:36
 * 订单的业务接口实现
 */
public class OrderServiceImpl implements OrderService {
    /**
     * 添加订单
     * @param order 订单实体
     */
    @Override
    public void addOrder(Order order) {
        Connection connection = null ;
        try {
            //加入事务管理
            connection = DruidJdbcUtils.getConnection(); //获取连接对象
            //开启事务
            connection.setAutoCommit(false) ; //禁用自动提交--->手动提交

            //下面业务操作


            //调用订单的数据访问接口
            OrderDao orderDao = new OrderDaoImpl() ;

            //插入订单数据
            orderDao.insertOrder(order);

            //直击出异常
//            int i = 10/0 ;

            //获取订单包含多个订单项
            List<OrderItem> items = order.getItems();
            for(OrderItem orderItem :items){
                orderDao.insertOrderItem(orderItem);
            }

            //提交事务
            connection.commit() ;
        } catch (SQLException throwables) {
            //事务回滚
            try {
                connection.rollback();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            throwables.printStackTrace();
        }
    }

    /**
     * 前台_订单分页查询
     * @param uid 用户uid
     * @param currentPage 当前页码
     * @param pageSize   每页显示的条数
     * @return 返回分页实体
     */
    @Override
    public PageBean<Order> getOrderByPage(String uid, int currentPage, int pageSize) {
        try {
            //调用订单数据访问接口
            OrderDao orderDao = new OrderDaoImpl() ;
            int totalCount = orderDao.getTotalCount(uid) ; //通过用户uid这个订单的总记录数有多少条
            //查询订单列表数据
            List<Order> list = orderDao.selectOrderByPage(uid,currentPage,pageSize) ;
            if(totalCount>0 &&(list!=null || list.size()>0)){
                return new PageBean<>(currentPage,pageSize,totalCount,  list);
            }

        } catch (Exception throwables) {
            throwables.printStackTrace();
        }
        return  null;
    }

    /**
     * 通过订单编号获取订单信息
     * @param oid 订单编号
     * @return 返回订单实体
     */
    @Override
    public Order getOrder(String oid) {
        try {
            //访问dao层
            OrderDao orderDao = new OrderDaoImpl() ;
            Order order = orderDao.selectOrderByOid(oid) ;
            if(order!=null){
                return  order ;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    /**
     * 更新订单
     * @param order 订单实体
     */
    @Override
    public void updateOrder(Order order) {
        try {
            //调用dao
            OrderDao orderDao = new OrderDaoImpl() ;
            orderDao.update(order) ;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}
